package com.fjzzct.report.dao;

import org.springframework.jdbc.core.namedparam.SqlParameterSource;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public interface BaseDao {

	/**
	 * 保存或者更新实体
	 * 
	 * @param sql
	 * @param entry
	 */
	<T extends Serializable> void saveOrUpdateObject(String sql, T entry);
	<T extends Serializable> void saveOrUpdateObjectByMap(String sql, HashMap<String, Object> paramMap);
	/**
	 * 查询实体列表
	 * 
	 * @param sql
	 * @param className
	 * @param obj
	 * @return
	 */
	<T extends Serializable> List<T> getObjList(String sql, Class<T> className,
												HashMap<String, Object> paramMap);

	<T extends Serializable> List<T> getObjListByProc(String procName, Class<T> className,
													  HashMap<String, Object> paramMap);

	/**
	 * 获取单个实体
	 * 
	 * @param <T>
	 * @param sql
	 * @param objs
	 * @return
	 */
	<T extends Serializable> T getObject(String sql, Class<T> clazz,
										 HashMap<String, Object> paramMap);

	/**
	 * 查询一个Map集合
	 * 
	 * @param sql
	 * @param objs
	 * @return
	 */
	Map<String, ?> find(String sql, HashMap<String, Object> paramMap);

	/**
	 * 多个参数同时更新操作
	 * 
	 * @param sql
	 * @param objLs
	 */
	void batchOperate(String sql, Map<String, ?>[] paramMap);

	void batchOperate(String sql, SqlParameterSource[] batchArgs);
	/**
	 * 判断实体是否存在
	 * 
	 * @param sql
	 * @param obj
	 * @return
	 */
	int isExist(String sql, HashMap<String, Object> paramMap);

	/**
	 * 编辑操作
	 * 
	 * @param sql
	 * @param obj
	 * @return
	 */
	int editObject(String sql, HashMap<String, Object> paramMap);
}
